package CreationMode.Singleton;

/**
 * <h3>23_Design_Patterns</h3>
 * <p>
 *     单例模式
 *     懒汉式
 *     懒汉式:相比于饿汉式我们可以优化下。在类加载的时候就不去实例化了，而是在需要的时候再处理了。
 * </p>
 *
 * @author gdw
 * @since 2025-07-21 10:38:20
 */
public class SingletonInstance2 {
    //声明此类型的变量，但没有实例化
    private static SingletonInstance2 instance=null;

    //私有化所有的构造方法，防止直接通过new关键字实例化
    private SingletonInstance2(){
        if(instance != null){
            // 只能有一个实例存在，如果再次调用该构造方法就抛出异常，防止反射方式实例化
            throw new RuntimeException("单例模式只能创建一个对象");
        }
    }

    //对外提供一个获取实例的静态方法，为了数据安全添加synchronized关键字
    public static synchronized SingletonInstance2 getInstance(){
        if(instance==null){
            //当instance不为空的时候才实例化
            instance=new SingletonInstance2();
        }
        return instance;
    }
}
